// pages/points/points.js
Page({
  onShow: function () {
    this.onLoad();
  },
  data: {
    pointsNumber: null,  // 模拟总积分
    pointsDetails: [    // 模拟积分明细
      {
        id: 1,
        date: '2024-11-01',
        change: 350,
        source: '购买商品',
        sourceId: 1
      },
      {
        id: 2,
        date: '2024-11-03',
        change: -50,
        source: '参与活动',
        sourceId: 2
      },
      {
        id: 3,
        date: '2024-11-05',
        change: 200,
        source: '签到奖励',
        sourceId: 1
      }
    ],
    exchangeRecords: [
      {
        user: '陈宇',
        avatar: '/resource/images/order/avatarDemo.png',
        message: '刚刚兑换了',
        shop: '兵哥的鼠标'
      },
      {
        user: '黎俊杰',
        avatar: '/resource/images/order/avatarDemo.png',
        message: '刚刚兑换了',
        shop: '兵哥的电脑'
      },
      {
        user: '首雯静',
        avatar: '/resource/images/order/avatarDemo.png',
        message: '刚刚兑换了',
        shop: '兵哥的键盘',
      }
    ],
    pointsRuleText: `
    积分规则：
    1. 每消费1元，获得10积分；
    2. 参与活动可获得积分奖励，积分奖励会根据活动的不同而有所不同；
    3. 积分可兑换商品，积分兑换商品的规则由商城设定；
    4. 积分有有效期，若在规定时间内未使用，积分将会过期；
    5. 通过签到、邀请好友等方式获得额外积分奖励；
    6. 积分可用于参与抽奖、抽奖次数会随着积分的增加而增加；
    7. 积分会根据用户的消费和活动参与情况逐步增长，用户可以在个人中心查看积分明细；
    8. 每月将进行一次积分清算，清算结果会发送至您的账户，敬请关注。

    （本规则如有变更，恕不另行通知，请随时关注更新。）
  `,
    // 奖品数据
    prizes: [],
    socketOpen: false,  // WebSocket连接状态
    socketTask: null,   // WebSocket任务对象
  },
  onLoad: function () {
    // 从后端获取奖品信息
    this.getPrizes();
    this.getPointsRecordTotal();
    // 初始化WebSocket连接
    this.initWebSocket();
  },

  //从后端获取积分总数
  getPointsRecordTotal: function () {
    wx.request({
      url: 'http://localhost:9020/couponIntegral-service/consumer/points-record-total/getPointsRecordTotal', // 替换为实际的后端地址
      method: 'GET',
      header: {
        'content-type': 'application/json' // 根据实际情况设置header
      },
      success: (res) => {
        if (res.statusCode === 200) { // 确认响应状态码
          const totalPoints = res.data; // 假设后端直接返回了积分总数
          this.setData({
            pointsNumber: totalPoints
          });
        } else {
          console.error('获取积分失败:', res);
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
      }
    });
  },

  // 从后端获取奖品信息
  getPrizes: function () {
    wx.request({
      url: 'http://localhost:9020/couponIntegral-service/operation/gift/page',  // 替换为实际的后端地址
      method: 'GET',
      header: {
        'content-type': 'application/json'  // 根据实际情况设置header
      },
      success: (res) => {
        if (res.statusCode === 200) {  // 确认响应状态码
          const prizes = res.data.currentPageRecords;  // 假设后端返回的数据结构中有records字段
          this.setData({
            prizes: prizes
          });
        } else {
          console.error('获取奖品信息失败:', res);
        }
      },
      fail: (err) => {
        console.error('请求失败:', err);
      }
    });
  },

  showPointsRule() {
    wx.showModal({
      title: '积分规则',
      content: this.data.pointsRuleText,
      showCancel: false,  // 不显示取消按钮
      confirmText: '确定',
      confirmColor: '#d17f39',  // 确定按钮的颜色
      success(res) {
        if (res.confirm) {
          console.log('用户点击确定');
        }
      }
    });
  },

  exchangePrize(event) {
    const prizeId = event.currentTarget.dataset.prizeId;
    // 这里可以添加逻辑来处理用户兑换奖品的操作
    console.log(`尝试兑换ID为${prizeId}的奖品`);
  },

  navigateToExchangeRecords: function () {
    wx.navigateTo({
      url: '/pages/person/point/exchangeRecords/exchangeRecords'
    });
  },

  navigateToPointsDetails: function () {
    wx.navigateTo({
      url: '/pages/person/point/pointsDetails/pointsDetails'
    });
  },

  navigateToSignIn: function () {
    wx.navigateTo({
      url: '/pages/person/point/signIn/signIn'
    });
  },

  exchangePrize(event) {
    const prizeId = event.currentTarget.dataset.prizeId;
    // 跳转到商品详情页，并传递奖品ID
    wx.navigateTo({
      url: `/pages/goods/detail/detail?id=${prizeId}`
    });
    console.log(`尝试兑换ID为${prizeId}的奖品`);
  },

  navigateToPrizeDetail(event) {
    const prize = event.currentTarget.dataset.prize;
    // 将对象转换成 JSON 字符串
    const prizeJson = encodeURIComponent(JSON.stringify(prize));
    // 导航到商品详情页，并将商品信息作为参数传递
    wx.navigateTo({
      url: `/pages/person/point/prizeDetail/prizeDetail?prize=${prizeJson}`
    });
  },

  onUnload: function () {
    // 确保在页面卸载时关闭WebSocket连接
    this.closeWebSocket();
  },

  initWebSocket: function () {
    const that = this;
    if (that.data.socketTask) {
      return;
    }

    // 创建WebSocket连接
    that.data.socketTask = wx.connectSocket({
      url: 'ws://localhost:9020/couponIntegral-service/ws/1', // 替换为实际的WebSocket服务器地址
    });

    // 监听WebSocket打开事件
    that.data.socketTask.onOpen((res) => {
      console.log('WebSocket opened:', res);
      that.setData({ socketOpen: true });
    });

    // 监听WebSocket接收消息事件
    that.data.socketTask.onMessage((res) => {
      console.log('Received message:', res.data);
      // 更新页面显示收到的消息
      // 这里可以根据实际情况更新数据
      // 假设消息是JSON字符串，我们首先需要解析它
      let messageData;
      try {
        messageData = JSON.parse(res.data);
      } catch (e) {
        console.error('Failed to parse message data:', e);
        return;
      }

      // 检查消息数据是否包含必要的信息
      if (messageData.shop && messageData.user) {
        // 创建一个新的兑换记录项
        const newRecord = {
          user: messageData.user,
          avatar: '/resource/images/order/avatarDemo.png', // 默认头像路径或根据实际情况设置
          message: '刚刚兑换了',
          shop: messageData.shop
        };

        // 更新exchangeRecords数据
        that.setData({
          exchangeRecords: [newRecord, ...that.data.exchangeRecords] // 将新记录添加到数组开头
        });
      } else {
        console.warn('Received message does not contain expected data:', res.data);
      }
    });

    // 监听WebSocket关闭事件
    that.data.socketTask.onClose((res) => {
      console.log('WebSocket closed:', res);
      that.setData({ socketOpen: false });
    });

    // 监听WebSocket错误事件
    that.data.socketTask.onError((error) => {
      console.error('WebSocket error:', error);
      that.setData({ socketOpen: false });
    });
  },

  send: function (message) {
    const that = this;
    if (that.data.socketOpen) {
      that.data.socketTask.send({
        data: message,
        success: function (res) {
          console.log('Message sent:', res);
        },
        fail: function (err) {
          console.error('Failed to send message:', err);
        }
      });
    } else {
      console.warn('WebSocket is not open. Unable to send message.');
    }
  },

  closeWebSocket: function () {
    const that = this;
    if (that.data.socketTask) {
      that.data.socketTask.close();
      that.setData({ socketOpen: false });
      that.data.socketTask = null;
    }
  },


})